package com.qf.web;

import com.qf.pojo.User;
import com.qf.service.UserService;
import com.qf.service.impl.UserServiceImpl;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

/**
 * @date 2022/3/26
 * @desc  登录
 *   接受 客户端数据    用户名  密码  验证码
 *   比较验证码
 *      正确  执行登录的业务
 *          userService.login(user)
 *              成功：跳转到main.jsp
 *              失败：跳转到登录页面
 *      错误  跳转到登录页面
 */
@WebServlet("/login")
public class LoginServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        //解决乱码
        req.setCharacterEncoding("utf-8");
        resp.setContentType("text/html; charset=UTF-8");

        //接受参数

        String username = req.getParameter("username");
        String password = req.getParameter("password");

        //获取用户输入的验证码
        String checkcode = req.getParameter("checkcode");

        // 因为下面要比较验证码了  验证码在session 中 所以在这要获取验证码
        HttpSession session1 = req.getSession();
        // 从session 中获取正确的验证码
        String code = (String) session1.getAttribute("code");

        // 比较验证码是否正确
        if(checkcode!=null&&checkcode.equalsIgnoreCase(code)){
                //  验证码正确
            //封装参数到对象
            User user = new User();

            user.setUsername(username);
            user.setPassword(password);


            UserService userService = new UserServiceImpl();
            // 执行和登录的业务
            User currentUser = userService.login(user);

            if(currentUser!=null){
                //用户名密码正确   跳转到主页面
                // 把用户信息 放入 session
                HttpSession session = req.getSession();
                //往域对象放数据  的目的   就是为了  页面跳转之后  在页面上取出来显示
                session.setAttribute("currentUser",currentUser);
                resp.sendRedirect("/main.jsp");
            }else{
                // 登陆失败
                //用户名或密码错误   给出提示信息
                //往域对象放数据  的目的   就是为了  页面跳转之后  在页面上取出来显示
                req.setAttribute("msg","用户名或密码错误");
                req.getRequestDispatcher("/login.jsp").forward(req,resp);
            }
        }else{
            // 验证码错误
            req.setAttribute("msg","验证码错误");
            //  数据回显
            req.setAttribute("username",username);
            req.setAttribute("password",password);

            req.getRequestDispatcher("/login.jsp").forward(req,resp);

        }



    }
}
